# hashlib 哈希库模块
import hashlib
# 基于数据计算md5值，提供数据必须编码为二进制，返回一个对象
m = hashlib.md5(b'123456')
print(m)
# 获取md5值，16进制格式
print(m.hexdigest())

# 创建一个空的基于md5的对象
m1 = hashlib.md5()
# 更新md2值，b表示字节号二进制
m1.update(b'12')
print(m1.hexdigest())
m1.update(b'34')
print(m1.hexdigest())
m1.update(b'56')
print(m1.hexdigest())

# Example：
print('---------Example----------')
# 传递一个文件路径，用于计算一个文件的md5值
def check_md5(file):
    # 创建空md5对象
    m = hashlib.md5()
    # 以二进制打开读取文件
    with open(file, mode='rb') as fr:
        while True:
            # 每次4kb，循环读取
            data = fr.read(4*1024)
            # 判断是否读到数据
            if not data:
                break
            # 读到数据更新md5值
            else:
                m.update(data)
            # print(m.hexdigest())
    # 返回16进制md5值
    return m.hexdigest()
# 函数测试
if __name__ == "__main__":
    result = check_md5('/usr/bin/ls')
    print(result)
